Networks have not traditionally been programmable entities. Although some programming frameworks may be used to configure networks, the intelligence has always been external to the network, and not an intrinsic part of the network itself. It would be useful to put more programmability in each switch and router rather than in the framework, where network operations may be implemented as a series of operations that are reflected into the network hardware. As networks become more complex and the need for them to respond to external changes in near real-time, the current approach of configuring networks at individual devices becomes impractical.
Network hardware has also suffered from a lack of introspection and reflection. Introspection is the ability of a program to examine the type or properties of a network element at runtime. Reflection allows programs the ability to manipulate the values, metadata, properties, and functions of the network element.